Support for AMOD 3080GL waypoints in NMEA reader. Strengthen NMEA tests.
authorrobertl <robertl>
Sat, 26 Jul 2008 20:30:35 +0000 (20:30 +0000)
committerrobertl <robertl>
Sat, 26 Jul 2008 20:30:35 +0000 (20:30 +0000)
nmea.c
reference/track/amod-cleansed [new file with mode: 0644]
reference/track/amod-nmea [new file with mode: 0644]
reference/track/amod.gpx [new file with mode: 0644]
testo

diff --git a/nmea.c b/nmea.c
index be751f994bd49edaab63e288c660bbfe2aa55ca1..e11b8906398a190a6cc601beca43e91fc0efac71 100644 (file)
--- a/nmea.c
+++ b/nmea.c
@@ -178,6 +178,7 @@ static char *opt_gisteq;
 static long sleepus;
 static int getposn;
 static int append_output;
+static int amod_waypoint;
 
 static time_t last_time;
 static double last_read_time;   /* Last timestamp of GGA or PRMC */
@@ -548,7 +549,8 @@ gprmc_parse(char *ibuf)
                         * going from 235959 to 000000. */
                         nmea_set_waypoint_time(curr_waypt, &tm, microseconds);
                }
-               return;
+                if (!amod_waypoint)
+                       return;
        }
                
        waypt  = waypt_new();
@@ -567,6 +569,11 @@ gprmc_parse(char *ibuf)
 
        nmea_release_wpt(curr_waypt);
        curr_waypt = waypt;
+
+       if (amod_waypoint) {
+               waypt_add(waypt_dupe(waypt));
+               amod_waypoint = 0;
+       }
 }
 
 static void
@@ -926,7 +933,10 @@ nmea_parse_one_line(char *ibuf)
        } else
        if (opt_gpgsa && (0 == strncmp(tbuf, "$GPGSA,",7))) {
                gpgsa_parse(tbuf); /* GPS fix */
-       }
+       } else
+        if (0 == strncmp(tbuf, "$ADPMB,5,0", 10)) {
+               amod_waypoint = 1;
+        }
 
        if (tbuf != ibuf) {
          /* clear up the dynamic buffer we used because substition was required */
diff --git a/reference/track/amod-cleansed b/reference/track/amod-cleansed
new file mode 100644 (file)
index 0000000..951b609
--- /dev/null
@@ -0,0 +1,17 @@
+$GPWPL,3549.499,N,08650.824,W,WPT001*31
+$GPWPL,3549.499,N,08650.824,W,WPT002*32
+$GPRMC,200641.000,V,3549.499,N,08650.824,W,0.00,224.45,050608,,*03
+$GPGGA,200641.000,3549.499,N,08650.824,W,0,00,0.0,0.000,M,0.0,M,,*74
+$GPVTG,224.450,T,0,M,0.000,N,0.000,K*55
+$GPRMC,200642.000,A,3549.499,N,08650.824,W,0.00,224.45,050608,,*17
+$GPGGA,200642.000,3549.499,N,08650.824,W,1,07,1.1,269.900,M,0.0,M,,*75
+$GPVTG,224.450,T,0,M,0.000,N,0.000,K*55
+$GPGSA,A,3,,,,,,,,,,,,,2.1,1.1,1.8*38
+$GPRMC,200643.000,A,3549.499,N,08650.824,W,0.00,224.45,050608,,*16
+$GPGGA,200643.000,3549.499,N,08650.824,W,1,07,1.1,269.900,M,0.0,M,,*74
+$GPVTG,224.450,T,0,M,0.000,N,0.000,K*55
+$GPGSA,A,3,,,,,,,,,,,,,2.1,1.1,1.8*38
+$GPRMC,200644.000,A,3549.499,N,08650.824,W,0.00,224.45,050608,,*11
+$GPGGA,200644.000,3549.499,N,08650.824,W,1,06,1.3,269.900,M,0.0,M,,*70
+$GPVTG,224.450,T,0,M,0.000,N,0.000,K*55
+$GPGSA,A,3,,,,,,,,,,,,,2.2,1.3,1.8*39
diff --git a/reference/track/amod-nmea b/reference/track/amod-nmea
new file mode 100644 (file)
index 0000000..df091cf
--- /dev/null
@@ -0,0 +1,24 @@
+A simple  NMEA file recorded by the AMOD 3080.  Note the two ADPMB button
+presses that indicate a waypoint.
+$GPGSA,A,3,32,31,20,14,30,16,22,,,,,,2.1,1.1,1.8*38
+$ADPMB,5,0
+$GPRMC,200641.000,A,3549.4991,N,08650.8239,W,0.00,224.45,050608,,,A*76
+$GPVTG,224.45,T,,M,0.00,N,0.0,K,A*08
+$GPGGA,200642.000,3549.4991,N,08650.8239,W,1,07,1.1,269.9,M,-31.4,M,,0000*61
+$GPGLL,3549.4991,N,08650.8239,W,200642.000,A,A*4C
+$GPGSA,A,3,32,31,20,14,30,16,22,,,,,,2.1,1.1,1.8*38
+$GPRMC,200642.000,A,3549.4991,N,08650.8239,W,0.00,224.45,050608,,,A*75
+$GPVTG,224.45,T,,M,0.00,N,0.0,K,A*08
+$GPGGA,200643.000,3549.4991,N,08650.8239,W,1,07,1.1,269.9,M,-31.4,M,,0000*60
+$GPGLL,3549.4991,N,08650.8239,W,200643.000,A,A*4D
+$GPGSA,A,3,32,31,20,14,30,16,22,,,,,,2.1,1.1,1.8*38
+$GPGSV,3,1,12,32,71,259,32,31,67,014,30,16,38,177,13,20,36,307,30*7A
+$GPGSV,3,3,12,23,09,299,26,29,06,081,,11,04,263,,05,02,037,*70
+$GPRMC,200643.000,A,3549.4991,N,08650.8239,W,0.00,224.45,050608,,,A*74
+$GPVTG,224.45,T,,M,0.00,N,0.0,K,A*08
+$GPGGA,200644.000,3549.4991,N,08650.8239,W,1,06,1.3,269.9,M,-31.4,M,,0000*64
+$GPGLL,3549.4991,N,08650.8239,W,200644.000,A,A*4A
+$GPGSA,A,3,32,31,20,14,30,22,,,,,,,2.2,1.3,1.8*3E
+$ADPMB,5,0
+$GPRMC,200644.000,A,3549.4991,N,08650.8239,W,0.00,224.45,050608,,,A*73
+$GPVTG,224.45,T,,M,0.00,N,0.0,K,A*08
diff --git a/reference/track/amod.gpx b/reference/track/amod.gpx
new file mode 100644 (file)
index 0000000..1ed5e99
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="35.824985000" minlon="-86.847065000" maxlat="35.824985000" maxlon="-86.847065000"/>
+<wpt lat="35.824985000" lon="-86.847065000">
+<time>2008-06-05T20:06:41Z</time>
+  <name>WPT001</name>
+  <cmt>WPT001</cmt>
+  <desc>WPT001</desc>
+</wpt>
+<wpt lat="35.824985000" lon="-86.847065000">
+<time>2008-06-05T20:06:44Z</time>
+  <name>WPT002</name>
+  <cmt>WPT002</cmt>
+  <desc>WPT002</desc>
+</wpt>
+<trk>
+<trkseg>
+<trkpt lat="35.824985000" lon="-86.847065000">
+<time>2008-06-05T20:06:41Z</time>
+  <course>224.449997</course>
+  <speed>0.000000</speed>
+</trkpt>
+<trkpt lat="35.824985000" lon="-86.847065000">
+  <ele>269.900000</ele>
+<time>2008-06-05T20:06:42Z</time>
+  <course>224.449997</course>
+  <speed>0.000000</speed>
+  <fix>3d</fix>
+  <sat>7</sat>
+  <hdop>1.100000</hdop>
+  <vdop>1.800000</vdop>
+  <pdop>2.100000</pdop>
+</trkpt>
+<trkpt lat="35.824985000" lon="-86.847065000">
+  <ele>269.900000</ele>
+<time>2008-06-05T20:06:43Z</time>
+  <course>224.449997</course>
+  <speed>0.000000</speed>
+  <fix>3d</fix>
+  <sat>7</sat>
+  <hdop>1.100000</hdop>
+  <vdop>1.800000</vdop>
+  <pdop>2.100000</pdop>
+</trkpt>
+<trkpt lat="35.824985000" lon="-86.847065000">
+  <ele>269.900000</ele>
+<time>2008-06-05T20:06:44Z</time>
+  <course>224.449997</course>
+  <speed>0.000000</speed>
+  <fix>3d</fix>
+  <sat>6</sat>
+  <hdop>1.300000</hdop>
+  <vdop>1.800000</vdop>
+  <pdop>2.200000</pdop>
+</trkpt>
+</trkseg>
+</trk>
+</gpx>
diff --git a/testo b/testo
index 95fa0902943e6e2b1aa25d40a60fb457a0d65733..dc4afaf066d69a729a8b79bed40f1c8c557bf8eb 100755 (executable)
--- a/testo
+++ b/testo
@@ -1047,6 +1047,16 @@ compare ${TMPDIR}/nmea.gpx ${REFERENCE}/track/nmea.gpx
 ${PNAME} -i nmea -f ${REFERENCE}/track/nmea+ms.txt -o gpx -F ${TMPDIR}/nmea+ms.gpx
 compare ${TMPDIR}/nmea+ms.gpx ${REFERENCE}/track/nmea+ms.gpx
 
+#
+# Read an NMEA file  with AMOD 3808 waypoints.  Be sure we read the points.
+# Also write as a "normal" NMEA to be sure AMOD extensions don't leak.
+#
+
+${PNAME} -i nmea -f reference/track/amod-nmea -o gpx -F ${TMPDIR}/amod-out.gpx -o nmea -F ${TMPDIR}/amod-pure
+compare ${TMPDIR}/amod-out.gpx reference/track/amod.gpx
+compare ${TMPDIR}/amod-pure reference/track/amod-cleansed
+
+
 #
 # Wfff.
 #